/**
 * ACL 采用大量的冗余设计，冗余设计的字段信息有：
 * 冗余字段 ：|business_line|type_name|detail_name|resource_level|first_level|second_level|third_level|fourth_level|fifth_level
 * 修改实体 ：|     NO      |   type  |   detail  |     detail   |   detail  |   detail   |   detail  |   detail   |   detail
 * business_line 不允许修改，也不允许删除，变更只能走数据订正。
 * type_name 的变更与删除，只能操作type_name. 会同步更新 detail和binding。如果存在detail表，存在type_name，则不允许删除，需要提前在detail表中的type_name信息。
 * detail_name、resource_level、first_level、second_level、third_level、fourth_level、fifth_level的变更和删除，只能操作detail.会同步更新binding.
 */
package org.web.accesscontrollist.sdk.dto.redundancy;

import lombok.Getter;
import lombok.Setter;
import org.web.accesscontrollist.sdk.dto.SaveParentDTO;
import org.web.base.domain.InsertGroup;

import jakarta.validation.constraints.*;

@Setter
@Getter
@NotNull(message = "TypeRedundancyDTO 不能为空")
public class TypeRedundancyDTO extends SaveParentDTO {

    /**
     * 业务线，冗余【资源详情表】的【business_line】字段，由于其冗余且做为关联使用，一但创建，则不要轻易修改。
     */
    @NotBlank(message = "businessLine can't be blank. ", groups = {InsertGroup.class})
    @Size(max = 100)
    public String getBusinessLine() {
        if (getOperatorDTO() == null) {
            return "";
        }
        return getOperatorDTO().getBusinessLine();
    }

    /**
     * 资源类型名称，oldTypeName指定准备要修改的资源类型名称，用于资源定义，来源于资源定义，不能为空，在确定business_line场合下，TypeName唯一确认一条记录。
     */
    @NotBlank(message = "oldTypeName can't be blank. ")
    @Size(max = 200)
    private String oldTypeName;

    /**
     * 资源类型名称，newTypeName指定准备修改后的资源类型名称，用于资源定义，来源于资源定义，不能为空，在确定business_line场合下，TypeName唯一确认一条记录。
     */
    @Size(max = 200)
    private String newTypeName;

    /**
     * 是否删除，标记是否逻辑删除，enum={Y:删除;N:不删除}
     */
    @Pattern(regexp = "^([YN])$", message = "Y:删除;N:不删除")
    @Size(max = 1)
    private String isDelete;

    @Override
    public String toString() {
        return "TypeRedundancyDTO{" +
                "businessLine='" + getBusinessLine() + '\'' +
                ", typeName=" + oldTypeName + '\'' +
                '}';
    }

}
